home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1995 October / EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso / Aminet / comm / fido / RFS275.lha / rexx / RFSNEWLIST.REXX < prev    next >
OS/2 REXX Batch file  |  1995-02-13  |  9KB  |  262 lines

  1. /**/
  2. v="$VER: RFSNewList  Rexx NewFiles List Creator Williamson 54.11"
  3. debug=0;cr='0a'x;lf='0a'x
  4. system="Amiga ECS"              /* Your system name and address here */
  5. default="  Sorry, there is no description for this area"||cr||cr
  6. /*          ^^ spaces required! */
  7. /*  You must create these files */
  8. bbslist="CFG:Browse.CFG"        /* filearea config  */
  9. htext="CFG:ABOUT.txt"  /* System header */
  10. areatext='area.text'            /* area description */
  11. /* output files - edit names to suit */
  12. todayslist="RAM:today.lst"                    /* Files received today */  
  13. newfileslist="MAIL:FILELISTS/NEWFILES.LST"    /* Last 7 days */  
  14. /* WB2 List Lformat parameters  */
  15. EXCLUDE='~(area.text|files.bbs|LZTEMP.#?|.info)'    /* LIST exclusion parameters    */
  16. LFMT_LIST='"%-20N%7L %-9D %C"'  /* all files list   */
  17. FLLEN=77                        /* list line length  */
  18. MARGINALL=39                    /* margin for LFMT_LIST  - wraptofile prepends a space  */
  19. /* used internally */
  20. fileslist="T:ALST-"Pragma('ID')      /* temporary all file */
  21. tmpbbs="T:MLST-"Pragma('ID')         /* temporary area list */
  22. script="RFSNewList";ver="v"||right(v,5);fmvers=script ver
  23.  
  24. CSI='9b'x;AOFF=CSI||'0m';BOLD=CSI||'1m';ULINE=CSI||'4m';ITALICS=CSI||'3;40m'
  25.  
  26. if ~show("L", "rexxsupport.library") then
  27.     if ~addlib("rexxsupport.library", 0, -30, 0) then do
  28.             say "Couldn't access support.library !"
  29.             exit 20
  30.     end
  31.  
  32. options results
  33. options failat 20
  34. signal on halt
  35. signal on ioerr
  36. signal on break_c
  37. signal on break_d
  38.  
  39. call close('STDOUT')
  40. if debug then call open('STDOUT',"CON:0/10/640/100/"script ver"/WAIT/CLOSE",'w')
  41. else call open('STDOUT',"CON:0/10/640/100/"script ver"/CLOSE",'w')
  42. call close('STDIN')
  43. call open('STDIN','*','R')
  44. call Pragma("P",-1)
  45.  
  46. /* Start Area Processing */
  47. if ~open('dlst',bbslist, 'R') then do
  48.     call writeln(STDOUT, "Couldn't open fileareas list" bbslist)
  49.     signal cleanup
  50. end
  51. if show('p',"ROOFLOG") then address 'ROOFLOG' 'logline' left(time(),5) script': Updating FILE Listing'
  52. call writeln(STDOUT, lf||ITALICS||" "fmvers||lf||" by Robert Williamson 1:167/104.0@fidonet"||AOFF)
  53. /* Start Area Processing */
  54. call writeln(STDOUT, 'Reading file area configuration')
  55. area=1
  56. do while ~eof('dlst')
  57.     call writech(STDOUT,'.')
  58.     blstln=readln('dlst')
  59.     if blstln="" then iterate
  60.     parse var blstln Number.area '"' Path.area '"' '"' Name.area '"'
  61.     if upper(strip(dequote(Path.area)))="NULL:" then iterate
  62.     area=area+1
  63. end /*eof*/
  64. call close('dlst')
  65.  
  66. areas=area-1
  67. call writeln(STDOUT,"")
  68. call writeln(STDOUT,'Found 'areas' file areas')
  69.  
  70. parse arg days
  71. if ~datatype(days,"N") | (days<=0 | days>16) then do
  72.     call writeln(STDOUT,"Days "days" must be > 0 and < 16")
  73.     exit 0
  74. end
  75. sincedate=space(date('n',date('i')-days),1,'-')
  76. sincedate=left(overlay(substr(sincedate,10,2),sincedate,8,2),9)
  77. call writeln(STDOUT,' Searching ALL areas for new files received in the last 'days' days since 'sincedate)
  78. tmp=""
  79. if days=1 then nlist=todayslist
  80. else nlist=newfileslist
  81.  
  82. /* open new file listing, put title, date and system header */
  83. call writeln(STDOUT,ULINE||"Generating "days" days New Files Listing for "system||AOFF||cr)
  84. if debug then call writeln(STDOUT,'Adding date/version header to 'fileslist)
  85. open('tbl', fileslist, 'W')
  86.   call writech('tbl',CENTER(fmvers" by Robert Williamson 1:167/104.0@fidonet",79)||cr)
  87.   call writech('tbl',CENTER("NewFiles Listing for" system  delstr(space(date(), 1, "-"), 8, 2) time(),79)||cr ||cr)
  88. close('tbl')
  89.  
  90. if ~exists('htext') then do
  91.     if debug then call writeln(STDOUT,'Adding headerfile' htext 'to 'fileslist)
  92.     com='Type >> "'fileslist'" "'htext'"'
  93.     address COMMAND com
  94. end
  95.  
  96. do area=1 to areas
  97.     areadir=addslash(dequote(Path.area))
  98.     if debug then call writeln(STDOUT,'Updating area' Name.area)
  99.     if listandsort(areadir,tmpbbs,LFMT_LIST) then call addheaders(prepend)
  100.     if ~open('ifn',tmpbbs,'R') then do
  101.         call writeln(STDOUT,'wraptofile:Cannot open 'tmpbbs)
  102.         signal cleanup
  103.     end
  104.     if ~open('ofn',fileslist,'A') then do
  105.         call writeln(STDOUT,'wraptofile:Cannot append Area List to 'fileslist)
  106.         signal cleanup
  107.     end
  108.     do while ~eof('ifn')
  109.         line=readln('ifn')
  110.         if left(line,1) ~= " " then call writech('ofn',' 'wrap_line(line,FLLEN,MARGINALL)) 
  111.         else call writech('ofn',line||cr)
  112.     end /*eof */
  113.     call close('ifn')
  114.     call close('ofn')
  115. end
  116. address COMMAND 'COPY 'fileslist' TO 'nlist
  117. if days>1 then call setcomment(nlist,"Last "days" days, since:"sincedate" Magic:NEW")
  118. call writeln(STDOUT,' Updated Last 'days' days NewFiles listing'||NL)
  119. cleanup:
  120. call delete(fileslist)
  121. call delete(tmpbbs)
  122. exit 0
  123.    
  124. setcomment:
  125. address command 'filenote' arg(1) '"'arg(2)'"'
  126. return
  127.  
  128. listandsort:
  129. /* list <tdir> with <lfmt> and sort to <tfile> */
  130. tdir=arg(1);tfile=arg(2);lfmt=arg(3)
  131. las='List DATES >'tfile tdir||exclude 'SINCE' sincedate 'FILES NOHEAD LFORMAT' lfmt
  132. address command las
  133. if word(statef(tfile),2)>0 then return 1
  134. else return 0
  135.  
  136. /* prepend area.text to files.bbs                               */
  137. /*    addareatext(areadir,files.bbs,area.text,output)           */
  138. /*    addareatext(areadir,files.bbs,area.text,output,where)     */
  139. /* where= append or prepend(DEFAULT)                            */
  140. /*  example:                                                    */
  141. /*    call addareatext(Path.area,availlist,areatext,availlist)  */
  142. addareatext:
  143. descfile=addslash(dequote(arg(1)))||arg(3)
  144. inlist=arg(2);tolist=arg(4);where=arg(5)
  145. if ~exists(inlist) then do
  146.     call writeln(STDOUT,'addareatext: cannot find 'inlist)
  147.     return 20
  148. end
  149.  
  150. if ~exists(descfile) then do
  151.     call writeln(STDOUT,'addareatext: cannot find 'descfile' using 'default)
  152.     if where='append' then do
  153.         call open('ds',descfile,'A')
  154.         call writech('ds',default)
  155.     end;else do
  156.         call open('ds',descfile,'W')
  157.         call writech('ds',default)
  158.     end
  159.     call close('ds')  
  160. end
  161. if where='append' then call join(inlist,descfile,tolist)
  162.     else call join(descfile,inlist,tolist)
  163. return 0
  164.  
  165. wrap_line:
  166. text=arg(1)
  167. right_edge=arg(2)  /* line length */
  168. left_edge=arg(3)  /*   margin    */
  169. new_text=''
  170. do while length(text) > 0
  171.     broken_word=0
  172.     if length(text) < right_edge then do
  173.         new_text=new_text || text || '0a'x
  174.         text=''
  175.     end;else do
  176.         temp_text=strip(text,l)
  177.         diff=length(text) - length(temp_text)
  178.         first_break=lastpos(' ',temp_text,right_edge - diff)
  179.         break_point=first_break + diff
  180.         if left_edge=break_point then do
  181.             break_point=right_edge - 1
  182.             broken_word=1
  183.         end
  184.         new_text=new_text || strip(left(text,break_point),t)
  185.         if broken_word then do
  186.             new_text=new_text || '-'
  187.         end
  188.         new_text=new_text || '0a'x
  189.         text=copies(' ',left_edge) || strip(right(text,length(text) - break_point),l)
  190.     end
  191. end
  192. return new_text
  193.  
  194. /*
  195.     join -- a 'front end' for join. Fixes a problem with join.
  196.     uses a tempfile if target filename is same as one to cat
  197. */
  198. join:
  199. x=arg(1)' 'arg(2)' 'arg(3)
  200. temp='arexxtempfile'
  201. do i=1 to (words(x)-1)
  202.     if word(x,i)=word(x,words(x)) then do
  203.         oops=word(x,words(x))
  204.         x=delword(x,words(x))||'TO '||temp
  205.         address COMMAND 'Join' x
  206.         address COMMAND 'Copy 'temp' 'oops
  207.         call delete(temp)
  208.         return 0
  209.     end
  210. end
  211. x=arg(1)' 'arg(2)' TO 'arg(3)
  212. address COMMAND 'Join' x
  213. return 0
  214.  
  215. addslash:
  216. curr=arg(1)
  217. select
  218.     when right(curr, 1)=":" then nop
  219.         when right(curr, 1)="/" then nop
  220.             otherwise curr=curr"/"
  221. end
  222. return curr
  223.  
  224. /* a useful procedure by Walt Sullivan  */
  225. dequote:
  226. parse arg thing
  227. parse var thing '"' unq_thing '"'
  228. if unq_thing ~= "" then return unq_thing
  229. return thing
  230.  
  231. halt:
  232. ioerr:
  233. break_c:
  234. break_d:
  235. call writech(stdout,cr)
  236. call cleanup()
  237. exit 10
  238.  
  239.  
  240. addheaders:
  241.     call writeln(STDOUT,'Appending 'areadir Number.area Name.area' to 'fileslist)
  242.     tbuf=CR||CR
  243.     tbuf=tbuf'ÕÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͸'||CR
  244.     tbuf=tbuf'³ °°°°°±±±±±²²²²²ÛÛÛÛÛ²²²²²³'center("AREA: "Number.Area,21)'³²²²²²ÛÛÛÛÛ²²²²²±±±±±°°°°° ³'||CR
  245.     tbuf=tbuf'ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´'||CR
  246.     tbuf=tbuf'³ °°°°°±±±±±²²²²²³'center(Name.Area,41)'³²²²²²±±±±±°°°°° ³'||CR
  247.     tbuf=tbuf'ÔÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ;'||CR
  248.  
  249.     if debug then call writeln(STDOUT,'Adding Area Banner to 'fileslist)
  250.     if ~open('tbl', fileslist, 'A') then do
  251.         call writeln(STDOUT,'Cannot append Area Header to 'fileslist)
  252.         signal cleanup
  253.     end
  254.     call writech('tbl',tbuf)
  255.     close('tbl');drop tbuf
  256.     if exists(areadir||areatext) then do
  257.         if debug then call writeln(STDOUT,'Adding Area description to 'fileslist)
  258.         com='Type >> "'fileslist'" "'areadir||areatext'"'
  259.         address COMMAND com
  260.     end
  261. return
  262.